--- title: "8、杨辉三角形" created: 2025-11-28 tags: - 算法 --- # 8、杨辉三角形 ## 题目 [杨辉三角形](https://www.lanqiao.cn/paper/3829/problem/1457/) ![[image-ff8351c4.png]] ## 思路分析 ![[image-188a9243.png]] 以为会是数字三角形模型的线性dp 但看到这个数据范围 n最大1e9 emm dp应该是不可能了 这得线性的算法啊 搞不懂 找一下规律先吧 ![[image-62cd3379.png]] ![[image-4e318573.png]] ![[image-5d6fd580.png]] ![[image-188a9243.png]] 要不能构造多少是多少 拿一部分分 ![[image-3bb81421.png]] ```cpp #include using namespace std; const int N=1010; int f[N][N]; int main() { for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ if(i==1) f[i][j]=1; else if(j==1) f[i][j]=1; else if(i==j) f[i][j]=1; else f[i][j]=f[i-1][j-1]+f[i-1][j]; cout< using namespace std; const int N=1010; int f[N][N]; int main() { int x;cin>>x; int curi,curj; for(int i=1;i<10;i++){ bool success=false; for(int j=1;j<=i;j++){ if(i==1) f[i][j]=1; else if(j==1) f[i][j]=1; else if(i==j) f[i][j]=1; else f[i][j]=f[i-1][j-1]+f[i-1][j]; // cout< using namespace std; const int N=1010; int f[N][N]; int main() { int x;cin>>x; int curi,curj; for(int i=1;i using namespace std; typedef long long LL; LL n; LL C(int x,int k){ LL ans=1; for(int i=x,j=1;j<=k;i--,j++){ ans=ans*i/j; if(ans>n)return ans; } return ans; } bool check(int x){ LL l=2*x,r=max(n,l); while(l>1; if(C(mid,x)>=n)r=mid; else l=mid+1; } if(C(r,x)!=n)return false; cout<<(LL)(r+1)*r/2+x+1<>n; for(int t=17;;t--){ if(check(t))break; } return 0; } ``` ## 同类题型 ## 视频讲解 --- ⬅️ [[7、砝码称重|7、砝码称重]] 🏠 [[00-刷题理模型]] ➡️ [[9、双向排序|9、双向排序]]